package com.wx.lambda.ii.chapter4;

import com.wx.lambda.ii.chapter2.Apple;
import com.wx.lambda.ii.chapter2.Chapter2Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 第二章试验
 * 对苹果的集合，进行过滤 根据颜色或者重量
 *
 * @author wang.xun
 * @date 2023/12/05
 * 操作类型 返回类型    操作参数        函数描述符
 * filter   中间     Stream<T>     Predicate<T> T -> boolean
 * map      中间     Stream<R>     Function<T, R> T -> R
 * limit    中间     Stream<T>
 * sorted   中间     Stream<T>     Comparator<T> (T, T) -> int
 * distinct 中间     Stream<T>
 * 终端操作:
 * forEach  终端      消费流中的每个元素并对其应用 Lambda。这一操作返回 void
 * count    终端      返回流中元素的个数。这一操作返回 long
 * collect  终端      把流归约成一个集合，比如 List、Map 甚至是 Integer。详见第 6 章
 */

public class Chapter4Test {
    public static void main(String[] args) {
        ArrayList<Apple> apples = new ArrayList<>();
        Chapter2Test.initData(apples);

        Map<String, List<Apple>> collect = apples.stream().collect(Collectors.groupingBy(Apple::getColor));
        System.out.printf("apples step1 : 处理后的集合 %s%n", collect);

        List<Dish> dishes = initData();
        dishes.stream().filter(Dish::isVegetarian).limit(2).forEach(System.out::println);


    }

    public static List<Dish> initData() {

        return Arrays.asList(
                new Dish("pork", false, 800, Dish.Type.MEAT),
                new Dish("beef", false, 700, Dish.Type.MEAT),
                new Dish("chicken", false, 400, Dish.Type.MEAT),
                new Dish("french fries", true, 530, Dish.Type.OTHER),
                new Dish("rice", true, 350, Dish.Type.OTHER),
                new Dish("season fruit", true, 120, Dish.Type.OTHER),
                new Dish("pizza", true, 550, Dish.Type.OTHER),
                new Dish("prawns", false, 300, Dish.Type.FISH),
                new Dish("salmon", false, 450, Dish.Type.FISH));
    }


}
